// 计算任意数字之和
function sum() {
    var sum = 0;
    for (var i = 0; i < arguments.length; i++) {
        sum += arguments[i]
    }
    return sum;
}

// 计算任意数字的阶乘Factorial
function Factorial(a) {
    if (a == 2) {
        return 2
    }
    return a * Factorial(a - 1);
}
//求任意两个数的最大公约数Common divisor  或最小公倍数Common multiple
function mGC(n1, n2, detail) {
    var yue = 1;
    for (var i = 2; i <= 9;) {
        if (n1 % i == 0 && n2 % i == 0) {
            n1 /= i;
            n2 /= i;
            yue = yue * i;
        } else {
            i++;
        }
    }
    if (detail == "max")
        return yue * n1 * n2
    return yue
}

//求任意两个数的最大公约数Common divisor
function maxGCD(n1, n2) {
    return mGC(n1, n2, "min")
}

//求任意两个数的最小公倍数Common multiple
function minGCM(n1, n2) {
    return mGC(n1, n2, "max")
}


// 求任意数中的最小值
function minNum() {
    var min = arguments[0];
    for (var i = 0; i < arguments.length; i++) {
        if (min > arguments[i]) {
            min = arguments[i]
        }
    }
    // console.log(min);
    return min;
}

// 求任意数中的最大值
function maxNum() {
    var max = arguments[0];
    for (var i = 0; i < arguments.length; i++) {
        if (max < arguments[i]) {
            max = arguments[i]
        }
    }
    return max;
}
//判断质数
function zhiShu(num) {
    var flag = true;
    for (var i = 2; i < num; i++) {
        if (num % i == 0) { //满足这个条件  说明有因子了  不是质数
            flag = false; //不是质数
            break;
        }
    }
    //如果假设成立  1不是素数
    return flag && num != 1 ? true : false
}
// 生成一个任意范围内的随机整数
function getRandomNum(a, b) {
    if (a > b) {
        return parseInt(Math.random() * (a - b + 1)) + b
    }
    return parseInt(Math.random() * (b - a + 1)) + a
}

// 封装一个随机颜色（不依赖 getRandomNum(a, b))
function getRandomColor(a) {
    if (a === 16) {
        var str = '0123456789abcdef';
        var res = '';
        for (var i = 0; i < 6; i++) {
            var idx = parseInt(Math.random() * 16);
            res += str[idx];
        }
        return '#' + res;
    }

    var r = parseInt(Math.random() * 256);
    var g = parseInt(Math.random() * 256);
    var b = parseInt(Math.random() * 256);
    return 'rgb(' + r + ',' + g + ',' + b + ')'
}

function getColor(a) {
    var r = parseInt(Math.random() * 256);
    var g = parseInt(Math.random() * 256);
    var b = parseInt(Math.random() * 256);
    if (a == 16) {
        r = r.toString(16);
        g = g.toString(16);
        b = b.toString(16);
        return '#' + r + g + b;
    }
    return 'rgb(' + r + ',' + g + ',' + b + ')';
}
/* 
    封装一个函数来写事件的兼容
    可变的东西都可以当成函数的参数
    【1】事件源
    【2】事件类型
    【3】事件出来函数
*/
function bindEvent(ele, type, fn) {
    // 做兼容判断
    if (ele.addEventListener) {
        ele.addEventListener(type, function() {
            fn();
        })
    } else {
        ele.attachEvent('on' + type, function() {
            fn();
        })
    }
}

/* 
    封装获取元素的函数：
    函数的实参形式：
    【1】#id名    表示通过id名获取元素
    【2】.class名 表示通过class名获取元素
    【3】标签名    表示同给标签名获取元素
*/
function getEle(ele) {
    // substr(参数1，参数2)
    // 参数1表示开始的索引位置
    // 参数2表示截取个数，如果没有参数2表示从开始位置截取到最后
    var str1 = ele.substr(0, 1); //拿到前面的字符
    var str2 = ele.substr(1);

    if (str1 === '#') {
        return document.getElementById(str2)
    } else if (str1 === '.') {
        return document.getElementsByClassName(str2);
    } else {
        return document.getElementsByTagName(ele);
    }
}

//以对象的形式封装正则判断
var obj = {
    user: function(str) {
        var reg = /^[a-zA-Z|_]{1}\w{4,17}$/; //字母或下划线开头的用户名
        return reg.test(str);
    },
    tel: function(str) {
        var reg = /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/; //手机号码
        return reg.test(str);
    },
    IDnumber: function(str) {
        var reg = /^\d{15}|\d{18}$/; //身份证号(15位、18位数字);
        return reg.test(str);
    },
    email: function(str) {
        var reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; //Email地址
        return reg.test(str);
    },
    date: function(str) {
        var reg = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/; //日期
        return reg.test(str);
    }
}